/**
 * 
 */
package org.stars.daostars.core.parser;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.stars.daostars.pipeline.DaoPipeline;
import org.stars.daostars.pipeline.DaoPipelineElement;
import org.stars.daostars.sqlmapper.SqlMapper;


/**
 *	Verifica la presenza di tutte le query definite nel pipeline checker.
 *
 * @author Francesco Benincasa (908099)
 * @date 21/nov/07, 12:37:06
 *
 */
public class PipelineChecker {
	
	/**
	 * get logger
	 * @return
	 * 	logger
	 */
	public static Log getLog()
	{
		return LogFactory.getLog(PipelineChecker.class);
	}
	
	/**
	 * Verifica che la definizione del dao abbia utilizzato per tutte le pipeline delle
	 * query che effettivamente esistono.
	 * 
	 * @param definition
	 * 			definizione del dao da testare
	 * @return
	 * 			senza errori restituisce <code>true</code>
	 */
	public static boolean checkForVariableBinding(SqlMapper definition)
	{
		boolean bRet=true;
		
		
		for(DaoPipeline pipeline: definition.getPipelineSet().values())
		{
			for (DaoPipelineElement item: pipeline.getPipeline())
			{
				if (!definition.existsQuery(item.getQueryName()))
				{
					
					bRet=false;		
					Log log=getLog();
					log.error("In the dao definition "+definition.getName()+" the pipeline "+pipeline.getName()+" use query "+item.getQueryName()+" does not exist!!!");					
					pipeline.setEnabled(false);
				}
			}

			if (!pipeline.isEnabled())
			{
				Log log=getLog();
				log.warn("Pipeline "+pipeline.getName()+" of dao "+definition.getName()+" is disabled!!");
			}
		}
		
		return bRet;
			
	}
}
